**************************************************************
*** Replication code for "The 'Commitment trap' Revisited: ***
*** Experimental Evidence on Ambiguous Nuclear Threats" by ***
*** Michal Smetana, Marek Vranka, and Ondrej Rosendorf     ***
**************************************************************

*** The code was written in Stata 17.0 BE-Basic Edition ***

*** Please reach out to ondrej.rosendorf@fsv.cuni.cz if you have any questions concerning this replication file ***

*** IMPORTANT: This file is accompanied by the svr_jeps_replication_data1 dataset ***

*** Before proceeding with the replication, please make sure that the "asdoc", "coefplot", "estout" and "catplot" package is installed ***

*** To install the asdoc package, use the following command ***

ssc install asdoc, replace

*** To install the coefplot package, use the following command ***

ssc install coefplot, replace

*** To install the estout package, use the following command ***

ssc install estout, replace

*** To install the catplot package, use the following command ***

ssc install catplot, replace

*** Setting the output scheme to black and white ***

set scheme s1mono

***************************************************
*** Replication of the results in the main text ***
***************************************************

*** Figure 4 (coefficient plot) - Approval (DV), non-nuclear response subset ***

* Running the ordinal logit model (Model 1)
* Note that the "ib1" prefix serves to change the reference level for the scenario_n variable to the ambiguous threat treatment
* The "if response==0" condition filters out respondents who received the nuclear response scenario
ologit approval_ordinal i.ib1.scenario_n if response==0

* Storing the estimates (Model 1)
estimates store M1

* Running the ordinal logit model with controls (Model 2)
* Note that the "ib1" prefix serves to change the reference level for the scenario_n variable to the ambiguous threat treatment
* The "if response==0" condition filters out respondents who received the nuclear response scenario
ologit approval_ordinal i.ib1.scenario_n i.male c.age c.income i.education_bin i.party if response==0

* Storing the estimates (Model 2)
estimates store M2

* Generating the coefficient plot (Figure 4)
coefplot M1, bylabel(Model 1) || M2, bylabel (Model 2) ||, xline(0) coeflabels(0.scenario_n = "{bf:Treatment (control – ambiguity)}" 2.scenario_n = "{bf:Treatment (explicit – ambiguity)}" 1.male = "Gender (male)" age = "Age" income = "Income" 1.education_bin = "Education (university degree)" 1.party = "Party (Democrat – Republican)" 2.party = "Party (Independent – Republican)")

* Exporting the coefficient plot (Figure 4)
graph export F04.png

*** Figure 5 (coefficient plot) - Approval (DV), ambiguous threat subset ***

* Running the ordinal logit model (Model 3)
* The "if scenario_n==1" condition filters out respondents who did not receive the ambiguous threat treatment
ologit approval_ordinal i.response if scenario_n==1

* Storing the estimates (Model 3)
estimates store M3

* Running the ordinal logit model with controls (Model 4)
* The "if scenario_n==1" condition filters out respondents who did not receive the ambiguous threat treatment
ologit approval_ordinal i.response i.male c.age c.income i.education_bin i.party if scenario_n==1

* Storing the estimates
estimates store M4

* Generating the coefficient plot (Figure 5)
coefplot M3, bylabel(Model 3) || M4, bylabel (Model 4) ||, xline(0) coeflabels(1.response = "{bf:Response (nuclear – non-nuclear)}" 1.male = "Gender (male)" age = "Age" income = "Income" 1.education_bin = "Education (university degree)" 1.party = "Party (Democrat – Republican)" 2.party = "Party (Independent – Republican)")

* Exporting the coefficient plot (Figure 5)
graph export F05.png

*** Figure 6 (coefficient plot) - Preference (DV), no subset ***

* Running the ordinal logit model (Model 5)
ologit preference_ordinal i.scenario_n

* Storing the estimates (Model 5)
estimates store M5

* Running the ordinal logit model with controls (Model 6)
* Note that the "##" operator specifies that the model should include an interaction between scenario_n and response
ologit preference_ordinal i.scenario_n##i.response i.male c.age c.income i.education_bin i.party

* Storing the estimates (Model 6)
estimates store M6

* Generating the coefficient plot (Figure 6)
coefplot M5, bylabel(Model 5) || M6, bylabel (Model 6) ||, xline(0) coeflabels(1.scenario_n = "{bf:Treatment (ambiguity – control)}" 2.scenario_n = "{bf:Treatment (explicit – control)}" 1.response = "Response (nuclear – non-nuclear)" 1.male = "Gender (male)" age = "Age" income = "Income" 1.education_bin = "Education (university degree)" 1.party = "Party (Democrat – Republican)" 2.party = "Party (Independent – Republican)" 1.scenario_n#1.response = "Treatment (ambiguity) * Response (nuclear)" 2.scenario_n#1.response = "Treatment (explicit) * Response (nuclear)")

* Exporting the coefficient plot (Figure 6)
graph export F06.png

************************************************
*** Replication of the results in Appendix 1 ***
************************************************

*** Appendix 1, Table 1 - Gender ***

* Generating a labelled version of the male variable
recode male (0=0 "Female") (1=1 "Male"), generate(male_label)

* Obtaining summary statistics for the male variable
asdoc tab male_label, save(A01T01)

*** Appendix 1, Table 2 - Age ***

* Obtaining summary statistics for the age variable
asdoc sum age, save(A01T02)

* Generating a labelled version of the education_bin variable
recode education_bin (0=0 "Less than Bachelor's degree") (1=1 "Bachelor's degree or higher"), generate(education_bin_label)

* Obtaining summary statistics for the male variable
asdoc tab education_bin_label, save(A01T03)

* Generating a labelled version of the income variable
recode income (1=1 "Less than $10000") (2=2 "$10000 to $15999") (3=3 "$16000 to $19999") (4=4 "$20000 to $29999") (5=5 "$30000 to $39999") (6=6 "$40000 to $49999") (7=7 "$50000 to $59999") (8=8 "$60000 to $69999") (9=9 "$70000 to $79999") (10=10 "$80000 to $89999") (11=11 "$90000 to $99999") (12=12 "$100000 to $149999") (13=13 "More than $150000"), generate(income_label)

* Obtaining summary statistics for the income variable
asdoc tab income_label, save(A01T04)

* Generating a labelled version of the party variable
recode party (0=0 "Republican") (1=1 "Democrat") (2=2 "Independent"), generate(party_label)

* Obtaining summary statistics for the party variable
asdoc tab party_label, save(A01T05)

************************************************
*** Replication of the results in Appendix 3 ***
************************************************

*** Appendix 3, Table 1 - ordinal logistic regression (Model 1 and 2) ***

* Generating a table with results (Appendix 3, Table 1)
esttab M1 M2 using A03T01.rtf, noeqlines eqlabels(none) eform nogaps se pr2 varlabels(0.scenario_n "Treatment (control - ambiguity)" 2.scenario_n "Treatment (explicit - ambiguity)" 1.male "Gender (male)" age "Age" income "Income" 1.education_bin "Education (university degree)" 1.party "Party (Democrat - Republican)" 2.party "Party (Independent - Republican)" _cons "Constant") drop(1.scenario_n 0.male 0.education_bin 0.party cut1 cut2 cut3 cut4 cut5 cut6) mtitle("Approval" "Approval") title(Table 1: Ordinal logistic regression of crisis handling approval) nonumbers mlabels("Model 1" "Model 2")

************************************************
*** Replication of the results in Appendix 4 ***
************************************************

*** Appendix 4, Table 1 - ordinal logistic regression (Model 3 and 4) ***

* Generating a table with results (Appendix 4, Table 1)
esttab M3 M4 using A04T01.rtf, noeqlines eqlabels(none) eform nogaps se pr2 varlabels(1.response "Response (nuclear - non-nuclear)" 1.male "Gender (male)" age "Age" income "Income" 1.education_bin "Education (university degree)" 1.party "Party (Democrat - Republican)" 2.party "Party (Independent - Republican)" _cons "Constant") drop(0.response 0.male 0.education_bin 0.party cut1 cut2 cut3 cut4 cut5 cut6) mtitle("Approval" "Approval") title(Table 1: Ordinal logistic regression of crisis handling approval) nonumbers mlabels("Model 3" "Model 4")

************************************************
*** Replication of the results in Appendix 5 ***
************************************************

*** Appendix 5, Table 1 - ordinal logistic regression results (Model 5 and 6) ***

* Generating a table with results (Appendix 5, Table 1)
esttab M5 M6 using A05T01.rtf, noeqlines eqlabels(none) eform nogaps se pr2 varlabels(1.scenario_n "Treatment (ambiguity - control)" 2.scenario_n "Treatment (explicit - control)" 1.response "Response (nuclear - non-nuclear)" 1.scenario_n#1.response "Treatment (ambiguity) * Response (nuclear)" 2.scenario_n#1.response "Treatment (explicit) * Response (nuclear)" 1.male "Gender (male)" age "Age" income "Income" 1.education_bin "Education (university degree)" 1.party "Party (Democrat - Republican)" 2.party "Party (Independent - Republican)" _cons "Constant") drop(0.scenario_n 0.response 0.male 0.education_bin 0.party cut1 cut2 cut3 0.scenario_n#0.response 0.scenario_n#1.response 1.scenario_n#0.response 2.scenario_n#0.response) mtitle("Preference" "Preference") title(Table 1: Ordinal logistic regression of nuclear use preference) nonumbers mlabels("Model 5" "Model 6")

************************************************
*** Replication of the results in Appendix 7 ***
************************************************

*** Appendix 7, Figure 1 (coefficient plot) - Approval (DV), explicit threat subset ***

* Running the ordinal logit model (Model 7)
* The "if scenario_n==2" condition filters out respondents who did not receive the explicit threat treatment
ologit approval_ordinal i.response if scenario_n==2

* Storing the estimates (Model 7)
estimates store M7

* Running the ordinal logit model with controls (Model 8)
* The "if scenario_n==2" condition filters out respondents who did not receive the explicit threat treatment
ologit approval_ordinal i.response i.male c.age c.income i.education_bin i.party if scenario_n==2

* Storing the estimates (Model 8)
estimates store M8

* Generating the coefficient plot (Appendix 7, Figure 1)
coefplot M7, bylabel(Model 7) || M8, bylabel (Model 8) ||, xline(0) coeflabels(1.response = "{bf:Response (nuclear – non-nuclear)}" 1.male = "Gender (male)" age = "Age" income = "Income" 1.education_bin = "Education (university degree)" 1.party = "Party (Democrat – Republican)" 2.party = "Party (Independent – Republican)")

* Exporting the coefficient plot (Appendix 7, Figure 1)
graph export A07F01.png

*** Appendix 7, Figure 2 (catplot) - Approval across response, explicit threat subset ***

* Generating a simplified version of the approval_ordinal variable
gen approval_adjusted = 0
replace approval_adjusted = 1 if approval_ordinal == 4
replace approval_adjusted = 2 if approval_ordinal == 5
replace approval_adjusted = 2 if approval_ordinal == 6
replace approval_adjusted = 2 if approval_ordinal == 7

* Generating a simplified version of preference_ordinal
gen preference_adjusted = 0
replace preference_adjusted = 1 if preference_ordinal == 3
replace preference_adjusted = 1 if preference_ordinal == 4

* Generating a labelled version of the scenario_n variable
recode scenario_n (0=0 "Control") (1=1 "Ambiguous threat") (2=2 "Explicit threat"), generate(scenario_n_label)

* Generating a labelled version of the response variable
recode response (0=0 "Conventional") (1=1 "Nuclear"), generate(response_label)

* Generating a catplot for approval_adjusted over response
* The "if scenario_n==2" condition filters out respondents who did not receive the explicit threat treatment
catplot approval_adjusted response_label if scenario_n==2, percent (response_label) ytitle ("Percent of Respondents by Approval", size(small)) intensity(75) asyvars stack blabel(bar, pos(center) format(%4.0f) size(small)) legend(rows(1) stack size(small) order(1 "Disapprove" 2 "Neither approve nor disapprove" 3 "Approve") symplacement(center))

* Exporting the catplot (Appendix 7, Figure 2)
graph export A07F02.png

************************************************
*** Replication of the results in Appendix 8 ***
************************************************

*** Appendix 8, Figure 1 (catplot) - Approval across treatment, non-nuclear response subset ***

* Generating a catplot for approval_adjusted over scenario_n
* The "if response==O" condition filters out respondents who received the nuclear strike scenario
catplot approval_adjusted scenario_n_label  if response==0, percent (scenario_n_label) ytitle ("Percent of Respondents by Approval", size(small)) intensity(75) asyvars stack blabel(bar, pos(center) format(%4.0f) size(small)) legend(rows(1) stack size(small) order(1 "Disapprove" 2 "Neither approve nor disapprove" 3 "Approve") symplacement(center))

* Exporting the catplot (Appendix 8, Figure 1)
graph export A08F01.png

*** Appendix 8, Figure 2 (catplot) - Approval across response, ambiguous threat subset ***

* Generating a catplot for approval_adjusted over response
* The "if scenario==1" condition filters out respondents who did not receive the ambiguous threat treatment
catplot approval_adjusted response_label if scenario_n==1, percent (response_label) ytitle ("Percent of Respondents by Approval", size(small)) intensity(75) asyvars stack blabel(bar, pos(center) format(%4.0f) size(small)) legend(rows(1) stack size(small) order(1 "Disapprove" 2 "Neither approve nor disapprove" 3 "Approve") symplacement(center))

* Exporting the catplot (Appendix 8, Figure 2)
graph export A08F02.png

*** Appendix 8, Figure 3 (catplot) - Preference over treatment

* Generating a catplot for preference_adjusted over scenario_n
catplot preference_adjusted scenario_n_label, percent (scenario_n_label) ytitle ("Percent of Respondents by Preference", size(small)) intensity(75) asyvars stack blabel(bar, pos(center) format(%4.0f) size(small)) legend(rows(1) stack size(small) order(1 "Prefer conventional" 2 "Prefer nuclear") symplacement(center))

* Exporting the catplot (Appendix 8, Figure 3)
graph export A08F03.png

*** Appendix 8, Figure 4 (catplot) - Preference over response

* Generating a catplot for preference_adjusted over response
catplot preference_adjusted response_label, percent (response_label) ytitle ("Percent of Respondents by Preference", size(small)) intensity(75) asyvars stack blabel(bar, pos(center) format(%4.0f) size(small)) legend(rows(1) stack size(small) order(1 "Prefer conventional" 2 "Prefer nuclear") symplacement(center))

* Exporting the catplot (Appendix 8, Figure 4)
graph export A08F04.png

*************************************************
*** Replication of the results in Appendix 10 ***
*************************************************

*** Appendix 10, Figure 1 (coefficient plot) - Approval (DV), non-nuclear response subset, MC pass ***

* Running the ordinal logit model (Model 1)
* Note that the "ib1" prefix serves to change the reference level for the scenario_n variable to the ambiguous threat treatment
* The "if response==0 & mc_pass==1" condition filters out respondents who received the nuclear response scenario and who did not pass the manipulation check
ologit approval_ordinal i.ib1.scenario_n if response==0 & mc_pass==1

* Storing the estimates (Model 1)
estimates store M1mc

* Running the ordinal logit model with controls (Model 2)
* Note that the "ib1" prefix serves to change the reference level for the scenario_n variable to the ambiguous threat treatment
* The "if response==0 & mc_pass==1" condition filters out respondents who received the nuclear response scenario and who did not pass the manipulation check
ologit approval_ordinal i.ib1.scenario_n i.male c.age c.income i.education_bin i.party if response==0 & mc_pass==1

* Storing the estimates (Model 2)
estimates store M2mc

* Generating the coefficient plot (Appendix 10, Figure 1)
coefplot M1mc, bylabel(Model 1) || M2mc, bylabel (Model 2) ||, xline(0) coeflabels(0.scenario_n = "{bf:Treatment (control – ambiguity)}" 2.scenario_n = "{bf:Treatment (explicit – ambiguity)}" 1.male = "Gender (male)" age = "Age" income = "Income" 1.education_bin = "Education (university degree)" 1.party = "Party (Democrat – Republican)" 2.party = "Party (Independent – Republican)")

* Exporting the coefficient plot (Appendix 10, Figure 1)
graph export A10F01.png

*** Appendix 10, Figure 2 (coefficient plot) - Approval (DV), ambiguous threat subset, MC pass ***

* Running the ordinal logit model (Model 3)
* The "if scenario_n==1 & mc_pass==1" condition filters out respondents who did not receive the ambiguous threat treatment and who did not pass the manipulation check
ologit approval_ordinal i.response if scenario_n==1 & mc_pass==1

* Storing the estimates (Model 3)
estimates store M3mc

* Running the ordinal logit model with controls (Model 4)
* The "if scenario_n==1 & mc_pass==1" condition filters out respondents who did not receive the ambiguous threat treatment and who did not pass the manipulation check
ologit approval_ordinal i.response i.male c.age c.income i.education_bin i.party if scenario_n==1 & mc_pass==1

* Storing the estimates (Model 4)
estimates store M4mc

* Generating the coefficient plot (Appendix 10, Figure 2)
coefplot M3mc, bylabel(Model 3) || M4mc, bylabel (Model 4) ||, xline(0) coeflabels(1.response = "{bf:Response (nuclear – non-nuclear)}" 1.male = "Gender (male)" age = "Age" income = "Income" 1.education_bin = "Education (university degree)" 1.party = "Party (Democrat – Republican)" 2.party = "Party (Independent – Republican)")

* Exporting the coefficient plot (Appendix 10, Figure 2)
graph export A10F02.png

*** Appendix 10, Figure 3 (coefficient plot) - Preference (DV), no subset, MC pass ***

* Running the ordinal logit model (Model 5)
* The "if mc_pass==1" condition filters out respondents who did not pass the manipulation check
ologit preference_ordinal i.scenario_n if mc_pass==1

* Storing the estimates (Model 5)
estimates store M5mc

* Running the ordinal logit model with controls (Model 6)
* The "if mc_pass==1" condition filters out respondents who did not pass the manipulation check
* Note that the "##" operator specifies that the model should include an interaction between scenario_n and response 
ologit preference_ordinal i.scenario_n##i.response i.male c.age c.income i.education_bin i.party if mc_pass==1

* Storing the estimates (Model 6)
estimates store M6mc

* Generating the coefficient plot (Appendix 10, Figure 3)
coefplot M5mc, bylabel(Model 5) || M6mc, bylabel (Model 6) ||, xline(0) coeflabels(1.scenario_n = "{bf:Treatment (ambiguity – control)}" 2.scenario_n = "{bf:Treatment (explicit – control)}" 1.response = "Response (nuclear – non-nuclear)" 1.male = "Gender (male)" age = "Age" income = "Income" 1.education_bin = "Education (university degree)" 1.party = "Party (Democrat – Republican)" 2.party = "Party (Independent – Republican)" 1.scenario_n#1.response = "Treatment (ambiguity) * Response (nuclear)" 2.scenario_n#1.response = "Treatment (explicit) * Response (nuclear)")

* Exporting the coefficient plot (Appendix 10, Figure 3)
graph export A10F03.png

************************************************
*** Continue with svr_jeps_replication_code2 ***
************************************************